//
//  Adapter_Pattern.h
//  HelloWorld
//
//  Created by Kevin Tang on 5/1/15.
//  Copyright (c) 2015年 Kevin Tang. All rights reserved.
//

#ifndef __HelloWorld__Adapter_Pattern__
#define __HelloWorld__Adapter_Pattern__
//应用于：当你现有类的接口，与用户需要的接口不一致，但又要用到原有的类提供的功能时。
//  将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。(gof)
#include <iostream>

namespace adapterpattern {
    
    class Target{//用户需要的类
    public:
       virtual void request()
        {//用户需要的接口
            
        }
    };
    
    class Adaptee{//原有的类
    public:
       void SpecificRequest()
        {//原有的接口，但这个接口不是用户所需要的
            
            std::cout<<" call SpecificRequest " <<std::endl;
        }
    };
    
    class Adapter:public Target,public Adaptee
    {//这是通过继承来实现的,另一种方式通过对象组合实现
    public:
        void request()
        {
            std::cout<<" call Adapter request and do something " <<std::endl;
            //做某些处理
            this->SpecificRequest();
            //然后在这里做一些处理。转换成用户想要的东西
        }
    };
    
    class AdapterA:public Target
    {
    private:
        Adaptee* mAdaptee;
    public:
        AdapterA()
        {
            mAdaptee = new Adaptee();
        }
        void request()
        {
            std::cout<<" call AdapterA request and do something " <<std::endl;
            //做一些处理
            mAdaptee->SpecificRequest();
            //做一些处理
        }
        
    };
    
    
    void test_Adapter();
    
    
}









#endif /* defined(__HelloWorld__Adapter_Pattern__) */
